前一篇說到 ROS 的核心精神,其中對一般初學者最有關還是它的模組化架構。因此,這一篇想要繼續介紹 ROS 系統的模組化架構,講講它具體長什麼樣子,有哪些功能可以使用。
ROS 系統功能可以分成兩大部份:檔案系統(Files System)、計算圖形(Compute Graph)。
檔案系統是 ROS 用來管理我們在開發過程中建立、執行的檔案以及相關編譯文件。其中最重要的兩個角色是套件(Package)和工作區(Workspace)。
套件(Package):
套件是開發機器人軟體的最基本單位,每一個套件會包含幾個功能單一的程序,組合起來可以完成特定的任務。
假設我想要開發一個可以自由行走的四足機器人,那麼我就需要開發「起身坐下」、「走路奔跑」、「保持平衡」等功能的「行走套件」。這個套件可以用於任何合適的情境,也可以分享出來讓其他開發者使用,這就是 ROS 模組化架構的精髓。
工作區(Workspace):
工作區是 ROS 提供給開發者一個管理專案的區塊,它是一種特殊的資料夾,透過 ROS 內建的管理工具建構,專案內使用或建立的套件、檔案都會放在裡面。
計算圖形這個名字看起來抽象,可以理解成它是 ROS 通訊網路,這個網路由節點(Node) 和節點之間流通的訊息(Message) 組成。
節點(Node):
節點是通訊網路的基本元件,每一個在 ROS 中運作的程序被視為一個節點。每一個節點都可以獨立運作,即使某些節點意外掛掉了,其他節點也不會受影響。
在節點之中有一個特殊的節點叫做主節點(Master),它的工作是協調其他節點互相通訊。主節點會維護一個名稱服務(Name Service) 的表格,裡面儲存每一個節點的名字,以便他們找到彼此並建立連結。
訊息(Message):
訊息是節點通訊使用的一種資料結構,不同的訊息類型(Message type)對應不同的資料型別,如:整數、浮點數、字串等。
雖然節點彼此是分散式架構,但訊息流通需要靠主節點來維護。如果主節點停止運作了,即使節點仍然可以持續運作,但通訊會中斷。
ROS 的社群並非 ROS 軟體本身的功能,而是泛指 ROS 官方文件、社群論壇和套件平台這些線上服務,ROS 的開發者們可以透過這些管道去熟悉 ROS 的功能,或是取得他人建立的套件。
ROS Wiki 是 ROS 官方維基,它涵蓋了 ROS 的入門指南、進階教學、API (如 rospy
或 roscpp
)、內建工具和常用套件等的使用方式 。
這個網站比較麻煩的一點是沒有搜尋功能(以前還有,不知道什麼時候拿掉了),而且網站導航也沒有做得很好,所以有時候特定功能的說明頁面明明就在裡面,卻無法直接在 ROS Wiki 裡找到,需要自己 Google 搜尋才能找到。需要注意 ROS Wiki 會在每一個頁面標註適用的版本,因此需要根據自己使用的版本來切換內容。
這裡列出初學者通常會用到的頁面,也是這個系列文主要的參考內容:
安裝說明(Installation):ROS/Installation
教學指南(Tutorials):ROS/Tutorials
核心資源(Core Libraries):APIs
常用工具(Common Tools):Tools
ROS Answers 和 Robotics Stack Exchange 是專門為 ROS 使用者設立的問答平台,類似於 Stack Overflow。前者已於 2023 年 8 月停止使用,大部份的問答都轉移到 Robotics Stack Exchange 上了。
ROS Index 是一個列出所有可用的 ROS 套件和資源的平台,裡面包含各種官方與第三方開發的 ROS 套件。
在 ROS Index 中,分成套件列表(Package list)和儲存庫列表(Repository list),使用者可以根據自己需求搜尋特定套件,或是直接從儲存庫將所有相關套件一併下載安裝。
這一篇只先簡單介紹了 ROS 系統架構有什麼東西,篇幅就快要爆炸了。之後會再分別詳細說明這些東西實際上要怎麼使用。
不過在那之前,下一篇會先來說明如何安裝 ROS 系統。